package main

//type Rev struct {
//	ID       string
//	task     Task
//	OrderRes interface{}
//	erMsg    error
//}
//
//var OrderRev chan Rev
//
//func init() {
//	OrderRev = make(chan Rev, 50)
//}

//func Order(task Task) map[string]interface{} {
//	seq := *task.Seq
//	client, ok := Hub.Clients[task.ID]
//	if ok {
//		msg, err := BrandManager.SelectBrand(task)
//		if err == nil {
//			go AsyncCall(client, 500*time.Millisecond, msg, task)
//		} else {
//			SendRes(task.ID, task, nil, err)
//		}
//	} else {
//		SendRes(task.ID, task, nil, errors.New("client is nil"))
//	}
//	return GetRes(seq)
//}
//
////处理超时执行
//func AsyncCall(client Client, duration time.Duration, ty []byte, task Task) {
//	ctx, cancel := context.WithTimeout(context.Background(), duration)
//	defer cancel()
//
//	go func(ctx context.Context, in []byte, client Client) {
//		fmt.Println("in:", string(in))
//		client.Send <- SendMsg{in, 1}
//		msg := <-client.Rev
//		if msg == nil {
//			SendRes(client.ID, task, msg, errors.New("msg is nil"))
//			return
//		}
//		resmap := make(map[string]interface{})
//		if jerr := json.Unmarshal(msg, &resmap); jerr != nil {
//			fmt.Println("josn unmashal err:", jerr)
//			SendRes(client.ID, task, msg, errors.New("josn unmashal err:"+jerr.Error()))
//			return
//		}
//		fmt.Println("rev:", string(msg))
//		SendRes(client.ID, task, msg, nil)
//	}(ctx, ty, client)
//
//	select {
//	case <-ctx.Done():
//		fmt.Println("call successfully!!!")
//	case <-time.After(duration + time.Millisecond * 50):
//		fmt.Println("timeout!!!")
//		SendRes(client.ID, task, nil, errors.New("time out"))
//	}
//}
//
//func SendRes(ID string, task Task, res interface{}, err error) {
//	OrderRev <- Rev{ID, task, res, err}
//}
//
//func GetRes(seq int) map[string]interface{} {
//	Rev := make(map[string]interface{})
//	err := new(error)
//	res := <-OrderRev
//	for k, _ := range seqMap {
//		if res.task.Seq == nil {
//			continue
//		}
//		if k == *res.task.Seq {
//			delete(seqMap, k)
//		}
//	}
//	resMsg := new(interface{})
//	switch res.task.Brand {
//	case "NewVersionFace":
//		*resMsg, *err = ParseNewVersionRev(res.OrderRes, res.task)
//	}
//	if res.erMsg != nil {
//		Rev[res.ID] = map[string]interface{}{
//			"seq": seq,
//			"err": res.erMsg.Error(),
//			"Msg": *resMsg,
//		}
//	} else if *err != nil {
//		Rev[res.ID] = map[string]interface{}{
//			"seq": seq,
//			"err": (*err).Error(),
//			"Msg": *resMsg,
//		}
//	} else {
//		Rev[res.ID] = map[string]interface{}{
//			"seq": seq,
//			"err": nil,
//			"Msg": *resMsg,
//		}
//	}
//	for k, v := range seqMap {
//		if _, ok := Rev[v]; ok {
//			delete(seqMap, k)
//		} else {
//			Rev[v] = map[string]interface{}{
//				"seq": seq,
//				"err": nil,
//				"Msg": errors.New("time out"),
//			}
//		}
//	}
//	//fmt.Println("res:", string(res))
//	return Rev
//}
